如何降 token 成本:pi 极简 Agent 上手
无论用 AI API 还是编码套餐,最常见的体验就是"用着用着额度就没了"。这节先讲日常使用侧的省钱技巧(让 AI 自己瘦身上下文),再介绍社区里很火的极简 agent 工具 pi——它是"从根上少花 token"的思路。服务端视角的成本工程(按角色选模型、缓存、三级降级)见 16-03,各家模型价格对比见 2-01,本节聚焦你每天敲命令的那一侧。
一、token 成本为什么越来越痛
三个现实叠加在一起:
- 编码套餐额度有限:Claude Code、Codex 的订阅套餐都有用量上限,重度使用时几轮大任务就把配额打满。
- 顶级模型越来越贵:随着模型能力增强,国内外厂商的旗舰模型定价都不便宜。
- 国内模型开始分峰谷时段:一些国产 flash 档模型按高峰/空闲时段区别定价,空闲时段便宜但那通常是你下班的时间(呼应 19-01 的 GLM 谷段低价机制)。
想在上班时间用上高质量回复,除了挑"快而便宜"的模型,更要管住一个隐藏大头——启动上下文。
先算一笔上下文账
主流模型的上下文窗口一般是 256K token 量级,但真正干活前,常驻的部分就已经被吃掉一大块:
- 全局 rules(CLAUDE.md 及 .claude/rules/ 拆分文件)
- 全局 skills 的描述信息
- 已注册 MCP server 的工具清单(每个工具的 name + description 都要占 token)
演示环境里这部分前置占用可达 20K+ token。也就是说会话刚开头,窗口就没了十分之一;再经历两三轮带工具调用的对话,上下文迅速逼近上限。此时 agent 会自动压缩(compact)历史——压缩必然丢失部分信息,然后还要重新注入一轮系统上下文和工具清单,又花一笔。
所以这里有一个三角取舍:方便、智力、成本。
- 简单任务(改个样式、写个脚本):不需要加载全部工具,上下文越瘦越好
- 复杂任务(跨包重构、架构分析):需要 MCP、计划模式这些重装备
按任务复杂度配装载,而不是永远全副武装——这是省 token 的第一性原理。
二、日常侧技巧:让 AI 自己瘦身
最简单的一招,是直接给你的 AI 下达元任务:
请你优化我的全局 rules、skills、MCP 配置,
扫描哪些长期没有被使用或已过时,压缩启动上下文的占用。
text
这句提示词在 Claude Code 和 Codex 里都可以直接用。它会扫描你所有 rules / skills / MCP 的实际使用情况,把没在更新、没在用的条目找出来。扫一遍之后你会发现,上下文里"前置被占用"的部分比想象中多得多。
配合两个工程手段效果更稳:
- prompt caching 已是业界标配:Anthropic、OpenAI、智谱等都支持缓存前缀,重复的系统提示和工具清单按缓存价计费(通常是原价的 1/10 左右)。要注意保持提示前缀稳定——前缀变了缓存就失效。pi 生态甚至有专门的扩展(pi-cache-optimizer)帮你监控缓存命中率。
- 上下文压缩类工具:社区有 billion-context 这类压缩插件(宣称小上下文窗口即可支撑长会话、token 用量降数倍,具体效果待验证),Claude Code 内置的 /compact 也是同一思路。
技巧胜在零成本,但边界也明显:Claude Code / Codex 的架构决定了它的常驻上下文下限就在那里——你把 skills 精简得再狠,框架本身的系统提示、工具协议、权限描述还是整套带在身上。想要更极端的瘦身,就要换一个更轻的 harness。
三、进阶方案:pi,把 harness 拆开卖
pi 是什么
浏览器打开 pi.dev。pi 是 Mario Zechner(libgdx 作者)开发的极简终端编码 agent,主打"Adapt Pi to your workflows, not the other way around"(让 pi 适配你的工作流,而不是反过来),在社区里非常火。
它和重型工具的设计差异,直接列在文档第一屏——pi 默认不带:
- MCP 集成
- 子代理(subagents)
- 权限升/降级体系
- 计划模式(plan mode)
- 内置待办清单(todo list)
- 后台 bash 执行
看起来生态是不是"完全割裂"了?别急。这些能力全部被封装成了独立的扩展包(pi packages):你要什么功能,就装什么包。官方仓库的口号可以概括为:改的是 harness,不是你的工作流——你原有的工作流可以原样嵌入,再按需加装 MCP 等扩展。
一个直观的类比:
| Claude Code / Codex | pi | |
|---|---|---|
| 像 | IntelliJ IDEA 这类集成 IDE | VS Code |
| 插件 | 预装好了,开箱即用 | 自己去市场搜、按需装 |
| 代价 | 方便,但常驻上下文重 | 轻快,但要自己折腾 |
pi 核心非常小(讲者上手时核心仅约 418 行 TypeScript,随版本演进会有变化),沙箱、待办、MCP 框架、内置界面全部移出核心,并且默认开启较高权限——担心把系统搞坏的话,把它放进 Docker 容器里运行(官方也提供容器化文档)。
pi 的架构:前端工程师会觉得格外亲切
pi 整个仓库(GitHub:earendil-works/pi,即 pi-mono)按包拆分:
pi-ai 统一模型接入层,对接各家 provider(含智谱/MiniMax/Moonshot/Qwen/小米 MiMo 等国内厂商)
pi-agent-core 核心调度层
pi-tui 终端 UI
pi-coding-agent CLI 本体,把上面三层组装起来
text
pi-agent-core 里最有意思的是双层循环设计,对应两种不同的消息:
- 打断式:像平时按 ESC 打断模型、再发新消息
- 入队式:把消息放进队列,等模型把当前任务执行完再继续执行——不是硬中断,而是影响模型输出的方向(steering)
对用 Node.js 编写的 pi 来说这非常自然:Node 的异步非阻塞 IO 天然适合这种异步任务排队。
扩展体系也全是"前端的方式":所有扩展用 npm 包封装,通过 pi install 安装。你甚至可以给 pi 开发自定义扩展——官方开放了 API,第三方开发者可以像给 VS Code 写插件一样给它写扩展。
与 Mastra / Vercel AI SDK 的区别
有同学可能会问:嵌入式的 pi 和第 15、16 章讲的 Mastra、Vercel AI SDK 有什么区别?
- Mastra 是全面的 AI agent 框架:工作流、记忆、评估、观测一应俱全,可玩性和配置空间大得多,适合构建你自己的 AI 产品(比如本课程的 ai-chat-ui 服务端)
- pi 是命令行工具:以极简、高性能的方式执行特定任务,面向的是"你自己每天的开发工作流"
两者定位不同:一个造产品,一个当工具。
树形会话:从 ChatGPT 网页端偷来的好设计
pi 的会话是树形结构——早期 ChatGPT 网页端采用的同款形态。左侧可以回到任意历史节点,从那个节点重新与模型会话,历史分支都保留,相当于内置了一个轻量本地记忆系统。这是 pi 极简之后反而做丰富的少数几个点之一(完整操作见下一节)。
需要注意:回退会话不等于回退代码。想让代码也跟着会话树走,需要配合 git 自动提交扩展(下一节实操)。
运行形态与模型切换
pi 支持多种运行形态:交互式、脚本模式(print mode)、JSON 事件流、RPC 模式、以及 TypeScript SDK 嵌入——"嵌入式"这一点对前端特别友好,可以把 pi 塞进自己的项目里当 agent 引擎用。
模型层对接了十余家 provider(官方 provider 列表已覆盖 30+,含国内厂商的 Coding Plan 端点),配置好之后 pi 会自动扫描可用模型,在 /model 菜单里选择;也可以用快捷键在不同模型间切换。一个省钱细节:对于简单冗余的任务,让 pi 走轻量模型——分层用模型这件事,在这里是抬手就能做的。
社区已有对 pi 与传统 Claude Code / Codex 的对比测评,普遍结论是同等任务下花费显著降低、完成效率不打折(具体数字随版本与用法波动,待验证,建议以自己一周的真实账单为准)。
四、pi 适合谁
- 极客:享受"什么插件自己装"的掌控感,愿意花时间折腾配置
- 独立开发者:一个人身兼数职,需要的是一把快刀而不是全家桶
- 预算敏感的用户:编码套餐额度紧张,或按 API 计费用得心疼的人
如果你只想"开箱即用、不想折腾",继续用 Claude Code / Codex 完全合理——先试试第二节的提示词瘦身,也能立竿见影。
本节小结
- token 成本痛点的三重来源:套餐额度有限、旗舰模型贵、国产模型分峰谷时段
- 上下文账:256K 窗口、前置常驻占用 20K+、两三轮对话即逼近上限触发压缩丢信息——方便/智力/成本三角要按任务取舍
- 日常技巧:一句"优化全局 rules/skills/MCP,压缩启动上下文"让 AI 自己瘦身;配合 prompt caching(保持前缀稳定)与压缩工具
- pi = 极简 harness + 包式扩展生态:核心几百行 TypeScript,MCP/子代理/计划模式/待办/后台 bash 全部拆成可选扩展,默认高权限(可入 Docker)
- 架构三层:pi-ai 统一模型层(30+ provider 含国内)、pi-agent-core 双层循环(打断 + 消息入队 steering)、pi-tui;树形会话可回退但代码不回退
- 定位区分:Mastra/Vercel AI SDK 用来造 AI 产品,pi 用来当自己的日常开发工具
下一节实操:安装 pi、配置第三方模型端点、精简 skills,以及会话树与 git 联动的分支管理技巧。
↑